/** ***********************************************************************************
* @file         national_data_process.c
* @brief        国标数据解析处理
* @details      主要使用来处理32960国标数据
* @author       杨小珛
* @date         2021/01/30
* @copyright    北京高知科技有限公司    
* @version      V1.0
* @attention    无
**************************************************************************************/
#include "national_data_process.h"

#define NAT_SEND_NAME   "NAT_SEND_TASK"
#define NAT_RECV_NAME   "NAT_SEND_TASK"

GaozQueueHandle_t national_send_res_queue; /*发送网络数据应答消息队列*/
socket_handle_s socket_handle;              /*定义socket handle 可以同时打开6路通道*/
socket_state_t socket_state;                /*定义socket 网络状态*/
national_run_state_e national_runing_st;   /*网络运行的状态*/
national_response_e national_response;     /*平台应答的方式*/
national_send_data_e national_send_data;   /*平台发送数据的状态*/
national_net_data_st_t national_net_data; /* 发送接收数据的网络状态*/


national_response_e national_response_test;     /*平台应答的方式*/
national_send_data_e national_send_data_test;   /*平台发送数据的状态*/
socket_handle_s socket_handle_test;              /*定义socket handle 可以同时打开6路通道*/
socket_state_t socket_state_test;                /*定义socket 网络状态*/


static void national_net_run_para_init( void );
static void  national_send_data_handle_task( void * pvParameters);
static void  national_recv_data_handle_task( void * pvParameters);
static uint32_t national_net_create_st_check(socket_handle_s *handle , socket_state_t *state);
static national_run_state_e national_net_runing_state_get( void );
static void national_net_runing_state_set( national_run_state_e  state );
static uint32_t national_data_manage_fun( national_send_data_e *send_st , national_response_e *recv_st);
static uint32_t national_net_send_suc( socket_state_t *state ,uint32_t time );
static void national_net_res_queue_create( void );
static uint32_t national_net_res_queue_get( national_net_res_msg_t *res_msg , uint32_t delay_time );
//static uint8_t national_net_res_queue_put( national_net_res_msg_t *res_msg );

//static uint32_t national_wait_response_result( uint32_t wait_time );
static uint32_t national_plat_time_delay( uint32_t wait_time );

static void national_data_analytic_fun( national_net_res_msg_t *net_res);

/** ****************************************************************************
* @remarks       static void national_net_run_para_init( void )
* @brief         网络运行参数初始化
* @param[in]     无
* @param[out]    无
* @return        无
* @attention     在系统启动后进行创建
*******************************************************************************/
static void national_net_run_para_init( void )
{
    national_runing_st = TER_RUNING_INIT;
    national_response = PLAT_NO_RESPONSE;
	memset((uint8_t *)&socket_state , 0x00 , sizeof(socket_state_t));
	memset((uint8_t *)&socket_handle , 0x00 , sizeof(socket_handle_s));
	socket_default( &socket_handle );
}

/** ****************************************************************************
* @remarks       void national_create_task( unsigned portBASE_TYPE uxPriority )
* @brief         国标数据处理任务
* @param[in]     uxPriority 优先级
* @param[out]    无
* @return        无
* @attention     在系统启动后进行创建
*******************************************************************************/
void national_create_task( unsigned portBASE_TYPE uxPriority )
{
    national_net_run_para_init();
    national_net_res_queue_create();
    gaoz_thread_create(national_send_data_handle_task, NAT_SEND_NAME, 1024*4, NULL, uxPriority);
    gaoz_thread_create(national_recv_data_handle_task, NAT_RECV_NAME, 1024*2, NULL, uxPriority);
}

/** ****************************************************************************
* @remarks       static void national_net_state_cb( void * pv)
* @brief         底层网络运行状态回调函数
* @param[in]     * pv 参数输入
* @param[out]    无
* @return        无
* @attention     在系统启动后进行创建
*******************************************************************************/
static void national_net_run_state_cb( void * pv)
{
	socket_net_state_s *net_state;
	if( pv == NULL )				/*空指针返回*/
	{
		return;
	}
	net_state = ( socket_net_state_s * )pv;
	if( socket_handle.connIndex != net_state->index_id )
	{
		return;
	}
	//OSI_LOGI(0,"GAOZ national net run state cb,net state=%d\r\n",net_state->net_state);
    //log_debug_printf(DEBUG_MODE,"NET_RUN_CB","National net run state cb,net state=%d\r\n",net_state->net_state );
	switch(net_state->net_state)
	{
		case SOCKET_SEND_OK:		/*数据发送成功*/
			socket_state.network_run_state.send_st = SEND_OK;
			break;
		case SOCKET_SEND_ERROR:		/*数据发送失败*/
			socket_state.network_run_state.send_st = SEND_ERR;
			break;
		case SOCKET_RECV_OK:		/*数据接收成功*/
			socket_state.network_run_state.recv_st = RECV_OK;
			break;
		case SOCKET_RECV_ERROR:		/*数据接收失败*/
			socket_state.network_run_state.recv_st = RECV_ERR;
			break;
		case SOCKET_LINK_ERROR:		/*网络连接失败*/
			socket_state.network_run_state.link_st = LINK_ERR;
			break;
		case SOCKET_CSQ_ERROR:		/*网络信息状态异常*/
			socket_state.network_run_state.csq_st = CSQ_ERR;
			break;
		case SOCKET_REG_ERROR:		/*网络附着网络失败*/
			socket_state.network_run_state.reg_st = REG_ERR;
			break;
		case GSM_NET_SLEEP:			/*底层网络睡眠*/
			socket_state.network_run_state.net_st = NET_SLEEP;
			break;
		case GSM_NET_STOP:			/*底层网络停止*/
			socket_state.network_run_state.net_st = NET_STOP;
			break;
		case GSM_NET_RST:			/*底层网络需要复位*/
			socket_state.network_run_state.net_st = NET_RST;
			break;
		case GSM_NET_RUN:			/* 底层网络运行中*/
			socket_state.network_run_state.net_st = NET_RUN;
			break;
        default:
            break;
	}
}

/** ****************************************************************************
* @remarks       static uint32_t national_net_create_st_check(socket_handle_s * handle , socket_state_t * state)
* @brief         创建 SOCKET 连接检测状态
* @param[in]     *handle 网络设备节点
* @param[in]     *state 网络状态
* @param[out]    无
* @return        pdFAIL 网络异常 pdFAIL 网络正常
* @attention     进入网络连接成功后分别对网络状态进行检测，其中1 2 3 4 5
			    代表检测的先后次序，同时也代表了事件检测的有限等级。
			    1、网络发送接收数据状态判断，超出设定次数后进行网络关闭；
			    2、网络链接异常，底层驱动设置。网络失效断开链接
			    3、网络信号状态异常，底层驱动设置。等待网络信号恢复正常但是不关闭网络链接。(链接超时后底层驱动会通知 2 )
			    4、网络附着状态异常，底层驱动设置。网络失效断开链接
			    5、底层网络运行状态设置，底层驱动设置。网络失效断开链接
*******************************************************************************/
static uint32_t national_net_create_st_check(socket_handle_s *handle , socket_state_t *state)
{
	uint32_t ret = pdFAIL;
	if(( handle == NULL ) || ( state == NULL ))
	{
		return ( ret );
	}
	if( state->create_socket_state  == SOCKET_LINK_CREATE_ERROR )
	{	
		memset((uint8_t *)state , 0x00 , sizeof(socket_state_t));//47.94.40.171   47.93.235.246
		gaoz_socket_bind( (socket_handle_s*)handle, (char *)"47.94.40.171",40000, e_socket_protocol_tcp, national_net_run_state_cb );
		//ret = gaoz_socket_connect( (socket_handle_s*)handle );
		if( ret == pdPASS )
		{
            log_debug_send(INFOR_MODE,NAT_SEND_NAME ,"Registered platform network is successful\r\n",0);
		    national_net_runing_state_set( TER_RUNING_REG );
			state->create_socket_state = SOCKET_LINK_CREATE_OK;
		}
	}
	else if( state->create_socket_state == SOCKET_LINK_CREATE_OK)
	{
        /*判断数据收发状态是否等待状态异常*/
/*1*/   if(( national_net_data.send_st >= NET_DATA_SEND_RECV_COUNTER ) || ( national_net_data.recv_st >= NET_DATA_SEND_RECV_COUNTER ))
        {
            gaoz_socket_close((socket_handle_s*)handle);
            state->create_socket_state = SOCKET_LINK_CREATE_ERROR;
			state->network_run_state.link_st = 0x00;
            national_net_data.send_st = 0;
            national_net_data.recv_st = 0;
            ret = pdFAIL;
        }
        /*判断网络模块网络连接状态异常*/
/*2*/	else if( state->network_run_state.link_st == LINK_ERR )
		{
			gaoz_socket_close((socket_handle_s*)handle);
			state->create_socket_state = SOCKET_LINK_CREATE_ERROR;
			state->network_run_state.link_st = 0x00;
			ret = pdFAIL;
		}
		/*信号质量异常网络注册网络节点不关闭等待网络信号回复正常*/
/*3*/	else if( state->network_run_state.csq_st == CSQ_ERR )
		{
			state->network_run_state.csq_st = 0x00;
			ret = pdFAIL;
		}
		/*判断GSM模块网络注册状态异常*/
/*4*/	else if( state->network_run_state.reg_st == REG_ERR )
		{
			gaoz_socket_close((socket_handle_s*)handle);
			state->create_socket_state = SOCKET_LINK_CREATE_ERROR;
			state->network_run_state.reg_st = 0x00;
			ret = pdFAIL;
		}
		/*网络进入 (睡眠 / 停止 / 复位 / 运行) 的状态*/
/*5*/	else if( state->network_run_state.net_st != 0 )
		{
		    if(( state->network_run_state.net_st == NET_SLEEP ) || ( state->network_run_state.net_st == NET_STOP ))
            {
                ret = pdFAIL;
            }  
            else if( state->network_run_state.net_st == NET_RUN )
            {
                ret = pdPASS;
            }
            state->network_run_state.net_st = 0;
		}
/*6*/	else
		{
			ret = pdPASS;
		}
	}
	else
	{
		ret = pdFAIL;
	}
	return ( ret );
}

/** ****************************************************************************
* @remarks       national_run_state_e national_net_runing_state_get( void )
* @brief         获取国标平台运行状态
* @param[in]     无
* @param[out]    无
* @return        运行状态
* @attention     在系统启动后进行创建
*******************************************************************************/
static national_run_state_e national_net_runing_state_get( void )
{
	return national_runing_st;
}

/** ****************************************************************************
* @remarks       void national_net_runing_state_set( national_run_state_e  state )
* @brief         设置国标平台运行状态
* @param[in]     state 运行状态
* @param[out]    无
* @return        无
* @attention     在系统启动后进行创建
*******************************************************************************/
static void national_net_runing_state_set( national_run_state_e  state )
{
	national_runing_st = state;
}

/** ****************************************************************************
* @remarks       static uint32_t national_net_send_suc( socket_state_t * state ,uint32_t time )
* @brief         等待网络数据发送成功
* @param[in]     *state 网络运行的状态 
* @param[in]     time 等待的时间 单位ms
* @param[out]    无
* @return        pdPASS 数据发送成功 ,pdFAIL 数据发送失败
* @attention     无
*******************************************************************************/
static uint32_t national_net_send_suc( socket_state_t *state ,uint32_t time )
{
	uint32_t ret = pdFAIL;
	do
	{
		gaoz_task_sleep( 10 );
		/*获取发送数据状态*/
		if( state->network_run_state.send_st != 0 )
		{	
			break;
		}
		if( time >= 10 )
		{
			time -= 10;
		}
		else
		{
			time = 0;
			continue;
		}
	}while( time );
	/******************判断网络数据是否发生完成****************************/
	if( state->network_run_state.send_st == SEND_OK )
	{
		ret = pdPASS;
	}
	state->network_run_state.send_st = 0;
	return ret;
}

/** ****************************************************************************
* @remarks       static void national_net_res_queue_create( void )
* @brief         国标数据平台接收数据应答消息队列创建
* @param[in]     无
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
static void national_net_res_queue_create( void )
{
    national_send_res_queue = gaoz_queue_create( NET_ACK_QUEUE_MAX_NUM, sizeof( national_net_res_msg_t ) );
    if( national_send_res_queue == 0 )
    {
        while( 1 );
    }
}

/** ****************************************************************************
* @remarks       static uint32_t national_net_res_queue_get( national_net_res_msg_t *res_msg , uint32_t delay_time )
* @brief         获取国标平台网络数据应答消息队列
* @param[in]     *res_msg 获取的数据地址
* @param[in]     delay_time 等待的时间
* @param[out]    无
* @return        pdPASS 接收数据成功 ，pdFAIL 接收数据失败
* @attention     无
*******************************************************************************/
static uint32_t national_net_res_queue_get( national_net_res_msg_t *res_msg , uint32_t delay_time )
{
    if( net_send_data_queue == 0 )
    {
        national_net_res_queue_create();
    }
    if(gaoz_queue_get( net_send_data_queue, res_msg, delay_time )  == 0 ) //等待回应信号量
    {
        return pdPASS;
    }
    else
    {
        return pdFAIL;
    }
    return pdFAIL;
}
#if 0
/** ****************************************************************************
* @remarks       static uint8_t national_net_res_queue_put( national_net_res_msg_t *res_msg )
* @brief         发送国标网络平台应答数据
* @param[in]     *res_msg 发送的数据地址
* @param[out]    无
* @return        1 发送数据成功 ，0 发送数据失败
* @attention     无
*******************************************************************************/
static uint8_t national_net_res_queue_put( national_net_res_msg_t *res_msg )
{
    if( gaoz_queue_put( national_send_res_queue, ( void * )&res_msg, 1000 ) < 0 )
    {
        return 1;
    }
	else
	{
		return 0;
	}
}
#endif
/** ****************************************************************************
* @remarks       uint32_t national_data_manage_fun( national_send_data_e *send_st , national_response_e *recv_st)
* @brief         国标数据管理功能
* @param[in]     无
* @param[out]    *nat_res 平台应答方式
* @return        pdPASS 数据发送失败 pdFAIL 数据发送成功
* @attention     在系统启动后进行创建
*******************************************************************************/

uint8_t net_buf_reg[] = {0x7E,0x05,0x01,0x00,0x80,0x18,0x36,0x17,0x03,0x00,0x00,0x00,0x00,0x00,0x0D,0xBF,0x2C,0x18,0x36,0x17,0x03,0x05,0x38,0x39,0x38,0x36,0x30,0x34,0x31,0x35,0x31,0x35,0x31,0x39,0x38,0x30,0x31,0x38,0x30,0x35,0x36,0x36,0x09,0x10,0x00,0x11,0x05,0x00,0x09,0x00,0x06,0x12,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x03,0x1A,0x31,0x36,0x30,0x30,0x30,0x2E,0x31,0x30,0x30,0x30,0x2E,0x30,0x30,0x2E,0x30,0x36,0x2E,0x30,0x32,0x2E,0x32,0x31,0x5F,0x30,0x30,0x31,0x04,0x12,0x47,0x5A,0x4C,0x36,0x31,0x30,0x41,0x50,0x50,0x2E,0x32,0x2E,0x30,0x2E,0x30,0x2E,0x31,0x33,0x62,0x7E};
uint8_t net_buf_data[] ={0x7E,0x05,0x04,0x00,0x2E,0x18,0x36,0x17,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x03,0x11,0x17,0x38,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEA,0x60,0x1F,0x00,0x00,0x00,0xDA,0x7E};
static uint32_t national_data_manage_fun( national_send_data_e *send_st , national_response_e *recv_st)
{
    uint32_t ret = pdFAIL;
    national_run_state_e run_st;
	run_st = national_net_runing_state_get();
    *send_st = PLAT_SEND_INIT;
    *recv_st = PLAT_RESPONSE_INIT;
	switch( run_st )
	{
		/*判断终端运行在初始化状态进行终端登陆平台*/
		case TER_RUNING_REG:
            ret = gaoz_socket_write( ( socket_handle_s * )&socket_handle ,net_buf_reg , sizeof(net_buf_reg) );
            if( ret ==  pdPASS ) 
            {
                *send_st = national_net_send_suc( (socket_state_t *)&socket_state ,NET_WAIT_SEND_MAX_TIME );
                if( *send_st  == pdPASS ) 
                {
                    *recv_st = PLAT_HAVE_RESPONSE;
                    national_net_runing_state_set( TER_RUNING_DATA );
                }
            }
		break;
		/*发送数据包*/
		case TER_RUNING_DATA:
            ret = gaoz_socket_write( ( socket_handle_s * )&socket_handle ,net_buf_data , sizeof(net_buf_data) );
            if( ret ==  pdPASS ) 
            {
                *send_st = national_net_send_suc( (socket_state_t *)&socket_state ,NET_WAIT_SEND_MAX_TIME );
                if( *send_st  == pdPASS ) 
                {
                    *recv_st = PLAT_HAVE_RESPONSE;
                    
                }
            }
		break;
		/*终端设备登出*/
		case TER_RUNING_LOGOUT:	
			
		break;
		/*平台查询系统版本号 成功*/
		case TER_RUNING_VERSION_TRUE:
			
		break;
		/*平台查询版本号 失败*/
		case TER_RUNING_VERSION_FAIL:
			
		break;
		/*车辆运行OTA控制*/
		case TER_RUNING_CONTROL_FOTA_TRUE:
			
		break;
		case TER_RUNING_CONTROL_FOTA_FAIL:
			
		break;
		/*车辆运行双闪控制*/
		case TER_RUNING_CONTROL_FLASHING_TRUE:
			
		break;
		case TER_RUNING_CONTROL_FLASHING_FAIL:
			
		break;
		/*车辆运行定位车辆控制*/
		case TER_RUNING_CONTROL_LOCATE_TRUE:
			
		break;
		case TER_RUNING_CONTROL_LOCATE_FAIL:
			
		break;
		/*车辆运行空调控制*/
		case TER_RUNING_CONTROL_AIR_COND_TRUE:

		break;
		case TER_RUNING_CONTROL_AIR_COND_FAIL:
		
		break;
		/*车辆运行车锁控制*/
		case TER_RUNING_CONTROL_DOOR_TRUE:
		
		break;
		case TER_RUNING_CONTROL_DOOR_FAIL:

		break;
		/*车辆运行发动机控制*/
		case TER_RUNING_CONTROL_ENGINE_TRUE:
		
		break;
		case TER_RUNING_CONTROL_ENGINE_FAIL:
			
		break;
		/*车辆运行车窗控制*/
		case TER_RUNING_CONTROL_WIND_TRUE:
			
		break;
		case TER_RUNING_CONTROL_WIND_FAIL:
			
		break;
		/*车辆运行天窗控制*/
		case TER_RUNING_CONTROL_ROOF_TRUE:
			
		break;
		case TER_RUNING_CONTROL_ROOF_FAIL:
			
		break;
		/*OTA远程升级过程*/
		case TER_RUNING_FOTA_SATRT:
			
		break;
		/*OTA升级中*/
		case TER_RUNING_FOTA_UPGRADE:
			
		break;
		/*通知平台刷新固件*/
		case TER_RUNING_FIRMWARE_SATRT:
			
		break;
		/*本地刷新固件成功*/
		case TER_RUNING_FIRMWARE_SUCCESS:
			
		break;
		/*本地刷新固件失败*/
		case TER_RUNING_FIRMWARE_FAIL:
			
		break;
		/*平台查询系统参数成功*/
		case TER_RUNING_QUERY_SYS_PAR_TRUE:
			
		break;
		/*平台参数系统参数失败*/
		case TER_RUNING_QUERY_SYS_PAR_FAIL:
			
		break;	
		/*平台设置系统参数成功*/
		case TER_RUNING_SET_SYS_PAR_TRUE:
			
		break;	
		/*平台设置系统参数失败*/
		case TER_RUNING_SET_SYS_PAR_FAIL:
			
		break;	
        default:
            break;
	}
	return ret;
}

/** ****************************************************************************
* @remarks       static uint32_t national_wait_response_result( uint32_t wait_time )
* @brief         国标数据应答状态分析
* @param[in]     wait_time 延时的时间设置 单位ms
* @param[out]    无
* @return        pdPASS 成功 pdFAIL 失败
* @attention     无
*******************************************************************************/
#if 0
static uint32_t national_wait_response_result( uint32_t wait_time )
{
	uint32_t ret = pdFAIL;
	national_net_res_msg_t net_res_msg;
	if( national_net_res_queue_get( &net_res_msg , wait_time ) == pdPASS )
	{	/* 解析数据应答的结果 */
		national_data_analytic_fun( &net_res_msg );
		ret = net_res_msg.results;
	}
	else
	{
		ret = pdFAIL;
	}
	return ret;
}
#endif
/** ****************************************************************************
* @remarks       static uint32_t national_plat_time_delay( uint32_t wait_time )
* @brief         等待平台消息延时功能
* @param[in]     wait_time 延时的时间设置 单位ms
* @param[out]    无
* @return        pdPASS 成功 pdFAIL 失败
* @attention     无
*******************************************************************************/
static uint32_t national_plat_time_delay( uint32_t wait_time )
{
	uint32_t ret = pdFAIL;
	national_net_res_msg_t net_res_msg;
	if ( national_net_runing_state_get() == TER_RUNING_DATA )
	{
		if( national_net_res_queue_get( &net_res_msg , wait_time ) == pdPASS )
        {   /* 解析数据应答的结果 */
            national_data_analytic_fun( &net_res_msg );
            ret = net_res_msg.results;
        }
	}
	else
	{	
		gaoz_task_sleep( wait_time );
	}
	return ret;
}

/** ****************************************************************************
* @remarks       void national_data_analytic_fun( national_response_e *nat_res)
* @brief         国标数据应答状态分析
* @param[in]     无
* @param[out]    *net_res 网络平台应答结果
* @return        无
* @attention     在系统启动后进行创建
*******************************************************************************/
static void national_data_analytic_fun( national_net_res_msg_t *net_res)
{
	switch( net_res->commane )
	{	
		/*注册平台*/
		case TER_RESPONSE_REG:		/*注册 平台应答*/
			if( net_res->results == pdPASS )
			{
				national_net_runing_state_set( TER_RUNING_DATA );
			}
			else
			{	
				national_net_runing_state_set( TER_RUNING_REG );
			}
		break;
		/*终端心跳应答*/
		case TER_RESPONSE_HEART: 	/*终端心跳平台应答*/
			if( net_res->results == pdPASS )
			{	
				national_net_runing_state_set( TER_RUNING_DATA );
			}
			else
			{	
				national_net_runing_state_set( TER_RUNING_DATA );
			}
		break;
		/*终端数据实时数据*/
		case TER_REALTIME_DATA_REQ:	/*实时数据平台应答*/
			if( net_res->results == pdPASS )
			{
				national_net_runing_state_set( TER_RUNING_DATA );
			}
			else
			{	
				national_net_runing_state_set( TER_RUNING_DATA );
			}
		break;
		/*终端数据补发数据*/
		case TER_RESEND_DATA_REQ: /*补发数据平台应答*/
			if( net_res->results == pdPASS )
			{
				national_net_runing_state_set( TER_RUNING_DATA );
			}
			else
			{	
				national_net_runing_state_set( TER_RUNING_DATA );
			}
		break;
		/*终端登出应答*/
		case TER_RESPONSE_LOGOUT:
		break;
		/*终端下发查询系统版本号*/
		case TER_QUERY_SYS_VERSION:
            
		break;
		/*平台下发控制 -- OTA升级*/
		case TER_CONTROL_TER_FOTA:
		break;
		/*平台下发控制 -- 双闪鸣笛*/
		case TER_CONTROL_TER_FLASHING_HORNS:
		break;
		/*平台下发控制 -- 远程定位车辆*/
		case TER_CONTROL_TER_LOCATE_VEHICLE:
		break;
		/*平台下发控制 -- 远程开始空调*/
		case TER_CONTROL_TER_START_AIR_COND:
		break;
		/*平台下发控制 -- 车门解锁*/
		case TER_CONTROL_TER_DOOR_UNCLOCK:
		break;
		/*平台下发控制 -- 远程启动/熄火发动机*/
		case TER_CONTROL_TER_START_ENGINE:
		break;
		/*平台下发控制 -- 远程升降车窗*/
		case TER_CONTROL_TER_UP_DOWN_WIND:
		break;
		/*平台下发控制 -- 远程天窗控制*/
		case TER_CONTROL_TER_ROOF_OPENING:
		break;
		/***********************************************************************************************/
		/*FOTA开始下载固件*/
		case TER_FOTA_DOWNLOAD_START:
		break;	
		case TER_FOTA_DOWNLOAD_STOP:
		break;	
		/***********************************************************************************************/
		/*固件下载成功*/
		case TER_FOTA_DOWNLOAD_SUCCESS:
		break;		
		/*固件升级失败*/
		case TER_FOTA_DOWNLOAD_ERR:
		break;
		/***********************************************************************************************/
		/*开始升级固件 成功*/
		case TER_FOTA_FIRMWARE_START:
		break;
		/*开始升级固件 失败*/
		case TER_FOTA_FIRMWARE_STOP:
		break;
		/***********************************************************************************************/
		/*应答本地升级固件 成功*/
		case TER_FOTA_FIRMWARE_SUCCESS:
		break;
		/*应答本地升级固件 失败*/
		case TER_FOTA_FIRMWARE_ERR:
		break;
		/*应答本地升级固件 超时*/	
		case TER_FOTA_FIRMWARE_TIME_OUT:
		break;
		case TER_QUERY_SYS_PARRMETER:
		break;
		case TER_SET_SYS_PARRMETER:
		break;
        default:
            break;
	}
}   


/** ****************************************************************************
* @remarks       void  national_data_handle_task( void * pvParameters)
* @brief         处理车机发送数据处理任务
* @param[in]     * pvParameters 任务参数
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
static void  national_send_data_handle_task( void * pvParameters)
{ 
    ( void ) pvParameters;
    gaoz_mon_reg_task_dog( 60 * GAOZ_TICK_PERIOD_S ,(uint8_t * )NAT_SEND_NAME , TASK_SEM_YES );
    for( ;; )
    {
        gaoz_mon_reset_task_dog();
		if( national_net_create_st_check( &socket_handle , &socket_state ) != pdPASS )
		{
			gaoz_task_sleep(5000); /*等待网络稳定，重新进行网络连接*/
			continue;
		}                            /*平台数据处理，等待进行*/
#if 1   
        if( national_data_manage_fun(&national_send_data , &national_response ) == pdPASS )
        {
            if( national_send_data == PLAT_SEND_OK )          /*发送数据成功*/
            {
                national_net_data.send_st = 0;
                if( national_response == PLAT_HAVE_RESPONSE ) /*等待平台应答*/
                {
                    gaoz_task_sleep( 3000 );
                    national_net_data.recv_st = 0;
                    #if 0
                    if( national_wait_response_result( NET_ACK_QUEUE_RX_DATA_TIME ) == pdPASS )
                    {   /* 网络数据接收成功 */
                        national_net_data.recv_st = 0;
                    }
                    else
                    {   /* 网络数据接收失败 */
                       national_net_data.recv_st ++;         /*接收数据错误状态计数器*/
                    }
                    #endif
                }
            }
            else
            {
                national_net_data.send_st ++;                /*发送数据错误状态计数器，延时1S中重新进行发送*/
				gaoz_task_sleep(1000);
            }
        }
		else
		{
			national_plat_time_delay( 100 );               /*使用消息邮箱检测平台主动下发的数据，增强信息处理的及时性*/
		}
#endif
    }
}

/** ****************************************************************************
* @remarks       static void  national_recv_data_handle_task( void * pvParameters)
* @brief         处理车机接收数据处理任务
* @param[in]     * pvParameters 任务参数
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
uint8_t recv_buffer[100];
static void  national_recv_data_handle_task( void * pvParameters)
{ 
    ( void ) pvParameters;
    gaoz_mon_reg_task_dog( 60 * GAOZ_TICK_PERIOD_S ,(uint8_t * )NAT_RECV_NAME , TASK_SEM_YES );
    for( ;; )
    {
        gaoz_mon_reset_task_dog();
        memset( (uint8_t *)recv_buffer , 0x00 , 100 );
        gaoz_socket_recv( &socket_handle, recv_buffer , 1000 );
    }
}

